第4章 网络层
物理层:
网络层:
- 虚拟互连网络的概念
- IP地址与物理地址的关系
- 传统的分类的IP地址和无分类域间路由选择CIDR
- 路由选择协议的工作原理
网络层提供的两种服务
- 虚电路VC服务:让网络负责可靠的交付
- 数据报服务:网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务
TCP/IP体系的网络层提供的是数据报服务。
网际协议IP
网际协议IP是TCP/IP体系中两个最主要的协议之一。
与IP协议配套使用的还有三个协议:
- 地址解析协议ARP
- 网际控制报文协议ICMP
- 网际组管理协议IGMP
逆地址解析协议RARP:和ARP协议配合使用的,现已淘汰
将网络互连起来需要一些中间设备:
- 物理层:转发器
- 数据链路层:网桥或桥接器
- 网络层:路由器
- 网络层以上:网关,用网关连接两个不兼容的系统需要在高层进行协议的转换。
当中间设备是转发器或网桥时,仅仅是扩大网络,从网络层的角度看仍然是一个网络。
虚拟互连网络
参加互连的计算机网络都使用相同的网际协议IP,因此可以把互连以后的计算机网络看成一个虚拟互连网络:逻辑互连,物理异构。利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。
互联网可以由多种异构网络互连组成
分类的IP地址
IP地址的编址方法经过三个历史阶段:
- 分类的IP地址:最基本的编址方法
- 子网的划分
- 构成超网:比较新的无分类编址方法
分类的IP地址就是将IP地址分为若干个固定类,每一类都由网络号和主机号组成,一台主机号在它网络号指明的网络范围内必须是唯一的,由此可见:一个IP地址在整个互联网范围内是唯一的
$IP地址 ::= {<网络号>, <主机号>}$
- A、B、C类地址的网络号字段分别为1个、2个和3个字节长
- A、B、C类地址的网络号的最前面分别是1位、2位、3位的类别位
- A、B、C类地址的主机号字段分别为3个、2个、1个字节长
- D类地址(前4位1110)用于多播
- E类地址(前4位是1111)保留后用
IP地址具有一些特点:
- 每一个IP地址都由网络号和主机号两部分组成,其好处有两个:
- IP地址管理机构只分配网络号,方便管理
- 路由器仅根据网络号转发分组,减少路由表所占的存储空间以及查找路由表的时间
- IP地址是标记一台主机(或路由器)和一条链路的接口。
- 用转发器或网桥连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络号。具有不同网络号的局域网必须使用路由器进行连接
- 互联网平等地对待每一个IP地址
IP地址与硬件地址
物理地址是数据链路层和物理层使用的地址,IP地址是网络层和以上各层使用的地址,是一种逻辑地址(因为由软件实现)。
- 在IP层抽象的互联网上只能看到IP数据报,数据报中间经过的路由器的IP地址并不出现在IP数据报的首部中
- 路由器只根据目的站的IP地址的网络号进行路由选择
- 在局域网的链路层,只能看到MAC帧。MAC帧在不同网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化
- IP层抽象的互联网屏蔽了下层的复杂细节,方便研究通信
地址解析协议ARP
ARP协议的作用:根据机器(主机或路由器)的IP地址,找出对应的硬件地址。
每一台主机都有一个ARP告诉缓存,里面有本局域网上各主机和路由器的IP地址到硬件地址的映射表,存放已知的一些地址。
既然网络链路层传送的帧是按照硬件地址寻址的,为什么还要使用抽象的IP地址,从而使用ARP协议?
答:全世界存在各式各样的网络,它们使用不同的硬件地址,要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这项工作几乎是不可能的事。但IP编址解决了这个复杂的问题,连接到互联网的主机只需要各自拥有一个唯一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便。
IP数据报的格式
版本:占4位,指IP协议的版本,通信的双方使用的IP协议的版本必须一致
首部长度:占4位,可表示的最大十进制数值是15,首部长度字段表示数的单位是32位字(即4字节)
- IP首部的固定长度是20字节,因此首部长度字段的最小值是5(0101)
- 当首部长度字段为最大值15(1111)时,表明首部长度达到最大值15个32位字,即60字节
- IP分组的首部长度必须是4的整数倍,不足则利用填充字段加以填充,因此IP数据报的数据部分永远在4字节的整数倍时开始
区分服务:占8位,用来获得更好的服务。只有使用区分服务时才起作用,一般情况下不使用。
总长度:占16位,指首部和数据之和的长度,表示数的单位为字节。
- 数据报的最大长度为$2 ^ {16} - 1 = 65535 字节$,实际上很少遇到这样长的数据报
- IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,称为最大传送单元MTU。
- 当IP数据报封装成链路层的帧时,此数据报的总长度一定不能超过下面数据链路层所规定的MTU值,超过则进行分片处理。常用的以太网的MTU值是1500字节。
- 总长度字段指分片后的每一个分片的首部长度和数据长度的总和
标志(flag):占3位,目前只有两位有意义
- 标志字段的最低位记为MF
- MF = 1:表示后面“还有分片”的数据报
- MF = 0:表示以及是数据报片的最后一个
- 标志字段中间的一位记为DF,意思是“不能分片”
- DF = 0:允许分片
- DF = 1:不能分片
- 标志字段的最低位记为MF
片偏移:占13位。较长的分组在分片后,某片在原分组中的相对位置。片偏移以8个字节为偏移单位,也就是说,每个分片的长度一定是8字节(64位)的整数倍。
生存时间:占8位,常用的英文缩写是TTL(Time To Live)。表明数据报在网络中的寿命。后来将功能改为“跳数限制”,TTL单位从秒变为跳数,TTL的意义指明数据报在互联网中至多可以经过多少个路由器。可设置的TTL最大数值是255,数据报每经过一个路由器,TTL减1,TTL为0时数据报被路由器丢弃。
协议:占8位,指出数据报携带的数据是使用核中协议,以便目的主机的IP层知道应将数据部分上交哪个协议处理
首部检验和:占16位
只检验数据报的首部,不包括数据部分:因为数据报没经过一个路由器,路由器都要重新计算下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化),不检验数据部分可以减少计算的工作量
为了进一步减少计算量,IP首部的检验和不采用复杂的CRC检验码
源地址:占32位
目的地址:占32位
可变部分:一个选项字段,1个字节到40个字节不等,用来支持排错、测量以及安全等措施。增加了IP数据报的功能,同时使IP数据报的首部长度成为可变的,但增加了路由器的处理开销,实际很少被使用。
IP层转发分组的流程
在互联网上转发分组时,是从一个路由器转发到下一个路由器。
在路由表中,每条路由最主要的是两个信息:
根据目的网络地址来确定下一跳路由器,可得出:
- IP数据报最终一定可以找到目的主机所在目的网络上的路由器
- 只有到达最后一个路由器时,才试图向目的主机进行直接交付
互联网所有的分组转发都是基于目的主机所在的网络,但也允许对特定的目的主机指明一个路由,即特定主机路由。
路由器还可采用默认路由(标记为0.0.0.0)以减少路由表所占用的空间和搜索路由表所用的时间。
IP数据报的首部没有存放“下一跳路由器的IP地址”,且首部的源IP地址和目的IP地址不变,路由器接收到数据报后从路由表得到下一跳路由器的IP地址,通过网络接口软件将其转换成硬件地址(ARP),并放在链路层的MAC帧的首部,根据该硬件地址寻找下一跳路由器。
路由表中能不使用IP地址直接使用硬件地址吗?
不行,使用抽象的IP地址目的是为了隐藏底层网络的复杂性而便于分析和研究问题,这样就不可避免的要付出些代价,如选择路由时的一些开销。
分组转发算法:
- 从数据报首部提取目的主机的IP地址,得出目的网络地址
- 若是路由器直连的某个网络地址,则把数据报直接交付目的主机:将目的主机地址转换为硬件地址,把数据报封装成帧并发送)。否则就是间接交付,执行3。
- 若路由表中有目的地址的特定主机路由,则把数据报传送给路由表中指明的下一跳路由器。否则执行4。
- 若路由表中有到达目的网络的路由,则把数据报传送给路由表中指明的下一跳路由器。否则执行5。
- 若路由表中有一个默认路由,则把数据报传送给路由表中指明的下一跳路由器。否则执行6。
- 报告转发分组出错
划分子网和构造超网
划分子网
在ARPANET早期,两级IP地址的缺点:
- IP地址空间的利用率有时很低
- 给每一个物理网络分配一个网格号会使路由表变得太大因而使网络性能变坏
- 两级IP地址不够灵活
1985年起,在IP地址中有增加了一个子网号字段,使两级IP地址变成三级IP地址,这种做法称为子网划分。
划分子网基本思路:
划分子网纯属一个单位内部的事情,单位对外仍然表现为一个网络
划分子网的方法是从网络的主机号借用若干位作为子网号,主机号相应减少了同样的位数,
记法:
IP地址 ::= {<网络号>,<子网号>,<主机号>}
仍然根据IP数据报的目的网络号找到连接在本单位网络上的路由器,路由器在接收到IP数据报后,再按目的网络号和子网号找到目的网络子网,把IP数据报交付目的主机
划分子网只是把IP地址的主机号部分进行再划分,而不改变IP地址原来的网络号。
从IP数据报的首部无法看出源主机或目的主机所连接的网络是否使用了子网的划分,需要使用子网掩码,子网掩码32位对应IP地址的网络号(包括子网号)部分全为1,主机号部分全为0。将IP地址与子网掩码**逐位相与(AND)**可得出子网的网络地址。
子网掩码中网络号对应位的1一般是连续的。
好处:不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位相与就立即得到网络地址来。以便路由器统一使用。
如果一个网络不划分子网,那么其子网掩码使用默认子网掩码:默认子网掩码中1的位置和IP地址中的网络字段(net-id)正好相对应。
子网掩码是一个网络或一个子网的重要属性。路由器和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。在路由器的路由表中的每一个项目,除了要给出目的网络地址外,必须同时给出该网络的子网掩码。若干一个路由器连接在两个子网就拥有两个网络地址和两个子网掩码。
划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。
使用子网时分组的转发
使用子网划分后,路由表必须包含以下三项内容:目的网络地址、子网掩码、下一跳地址。
划分子网情况下的分组转发算法:
- 从收到的数据报首部获取目的IP地址D
- 判断是否直接交付。对路由器之间相连的网络逐个进行检查:用各网络的子网掩码和D逐位相与,看结果是否和相应的网络地址匹配,若匹配则直接交付(转换成帧);否则就是间接交付3
- 若路由器中有目的网络地址为D的特定主机路由,则把数据报传送给路由表中指明的下一跳路由器。否则执行4
- 对路由表中的每一行(三项内容),用其子网掩码和D逐位相与,其结果为N。若N与目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器。否则执行5
- 若路由器中有一个默认路由,则把数据报传送给路由表中指明的默认路由器。否则执行6
- 报告转发分组出错
无分类编址CIDR(构造超网)
使用变长子网掩码VLSM可进一步提高IP地址资源的利用率。在VLSM的基础上又进一步研究出无分类编址方法,正式名称是无分类域间路由选择CIDR。
CIDR最主要的两个特点:
- CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,因而能更加有效地分配IPv4的地址空间,并且在新的IPv6使用之前容许互联网的规模继续增长
- CIDR把网络前缀都相同的连续IP地址组成一个CIDR地址块
CIDR把32位的IP地址划分为前后两个部分:前面部分是网络前缀,指明网络;后面部分用来指明主机。
CIDR使IP地址从三级编址又回到了两级编址,无分类的两级编址:IP地址 ::= {<网络前缀>, <主机号>}
CIDR使用斜线记法,或称为CIDR记法,即IP地址后面加上斜线,然后写上网络前缀所占的位数。
CIDR使用32位的地址掩码,斜线记法中,斜线后面的数字就是地址掩码中1的个数。
由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合,使得路由表中的一个项目可表示原来传统分类地址的很多个路由。路由聚合也称构成超网(每个CIDR地址块都包含了多个C类地址)。
路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
使用CIDR可以更加有效地分配IPv4的地址空间,可根据客户的需要分配适当大小的CIDR地址块。网络前缀越短,其地址快所包含的地址数就越多。
在三级结构IP地址中,划分子网是使网络前缀变长。
**最长前缀匹配:**使用CIDR时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由时可能会得到不止一个匹配结果。此时,应答从匹配结果中选择具有最长网络前缀的路由,因为网络前缀越长,其地址块就越小,因而路由就越具体。
CIDR查找路由表的方法:
- 最简单:对所有可能的前缀进行循环查找,但查找次数太多
- 为了更加有效地查找最长前缀匹配,通常将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里常用的数据结构就是二叉线索。
网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网络层使用了网际控制报文协议ICMP,ICMP运行主机或路由器报告差错情况和提供有关异常情况的报告。
ICMP是互联网标准协议,但不是高层协议,ICMP报文是装在IP数据报中,作为其数据部分,是IP层的协议。
ICMP报文的种类:
- ICMP差错报告报文
- ICMP询问报文
ICMP报文的代码字段是为了进一步区分某种类型中的几种不同情况,检验和字段用来校验整个ICMP报文(IP数据报首部的检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错)。
如图,所有ICMP差错控制报文拥有同样的格式:
把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段
【目的:为了得到运输层的端口(对于TCP或UDP)以及运输层报文的发送序号(对于TCP)】
加上ICMP差错控制报文的前8个字节,构成了ICMP差错控制报文
整个ICMP报文作为IP数据报的数据字段发送给源点
不应发送ICMP差错报告报文的几种情况:
- 对ICMP差错报告报文,不再发送ICMP差错报告报文
- 对第一个分配的数据报片的所有后续数据报片,都不发送ICMP差错报告报文
- 对具有多播地址的数据报,都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报,不发送ICMP差错报告报文
常用的ICMP询问报文有两种:
- 回送请求和回答
- 时间戳请求和回答
ICMP的重要应用:
- 分组网间探测PING,用来测试两台主机之间的连通性。PING使用ICMP回送请求与回送回答报文,是应用层直接使用网络层ICMP的一个例子(没有通过TCP或UDP)
- 跟踪分组从源点到终点的路径的应用:
- Windows:tracert
- Unix:traceroute
互联网的路由选择协议
从路由算法能否随网络的通信量或拓扑自适应地进行调整或变化来划分,有两大类:
- 静态路由选择策略,又称非自适应路由选择,特点是简单和开销小,但不能及时适应网络状态的变化
- 动态路由选择策略:又称自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大
互联网采用分层次的路由选择协议,其原因是:
- 互联网规模非常大
- 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议,且希望连接到互联网上
自治系统AS是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个AS对其它AS表现出的是一个单一的和一致的路由选择策略。
互联网把路由选择协议划分为两大类:
- 内部网关协议IGP:如RIP、OSPF
- 外部网关协议EGP:如BGP
自治系统之间的路由选择叫做域间路由选择,而自治系统内部的路由选择叫做域内路由选择。
内部网关协议RIP
RIP是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,最大的优点是简单。
RIP协议要求网络中的每一个路由器都要维护从它自己到其它每一个目的网络的距离记录(距离向量)。
RIP协议的“距离”也称为“跳数”,每经过一个路由器,跳数就增加1。RIP允许一条路径最多只能包含15个路由器,因此“距离“等于16时即相当于不可达。RIP只适用于小型互联网。
RIP不能在两个网络之间同时使用多条路由,RIP选择一条具有最少路由器的路由(最短路由)。
RIP协议的特点:
- 仅和相邻路由器交换信息
- 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表
- 按固定的时间间隔交换路由信息
在一般情况下,RIP协议可以收敛,并且过程较快。
**”收敛“**就是在自治系统中所有的结点都得到正确的路由选择信息的过程。
路由表中最主要的信息就是:到某个网络的距离(即最短距离),以及应经过的下一跳地址。
路由表更新的原则就是找出到每个目的网络的最短距离,这种更新算法又称为”距离向量算法”。
距离向量算法
每个路由表项目项目都有三个关键数据:<目的网络N,距离d,下一跳路由器X>。
对每个相邻路由器发送过来的RIP报文,进行以下步骤:
对地址为X的相邻路由器发来的RIP报文,先修改此报文中的所有项目:
- 把下一跳字段中的地址改为X
- 把所有的距离字段的值加一
对修改后的RIP报文中的每一个项目,进行以下步骤:
若原来的路由表中没有目的网络N,则把该项目添加到路由表中
否则:
若下一跳路由器地址是X,则把收到的项目替换原路由表中的项目
否则:
若收到的项目中的距离d小于路由表中的距离,则进行更新
否则什么也不做
若3分钟还没有收到相邻路由表的更新路由表,则把此相邻路由器标记为不可达的路由器,即把距离置为16
返回
RIP协议的报文格式
RIP协议是应用层协议,使用运输层的用户数据报UDP进行传送(使用UDP的端口520)
RIP报文由首部和路由部分组成:
- 首部占4个字节
- 路由部分占20个字节
一个RIP报文最多可包含25个路由,RIP报文的最大长度是$4+20\times25=504$字节
RIP协议的优点:实现简单、开销较小、收敛较块。
RIP协议的缺点:
- RIP限制了网络的规模,它能使用的最大距离是15(16表示不可到达)
- 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加
- 当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器,即“好消息传得快,坏消息传得慢”,使更新过程的收敛时间过长。
内部网关协议OSPF
OSPF最主要的特征就是使用分布式的链路状态协议,与RIP相比,有三个要点不一样:
- 向本自治系统中所有路由器发送信息,使用洪泛法,RIP仅向相邻路由器发送信息
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所指的的部分信息
- 只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息
由于各个路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库,这个数据库实际上就是全网的拓扑结构图,在全网范围内是一致的(称为链路状态数据库的同步)。
RIP协议的每个路由器虽然知道所有的网络的距离以及下一跳路由器,但却不知道全网的拓扑结构。
OSPF的更新过程收敛得快是其重要优点。
为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域。
划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统,减少整个网络上的通信量。
区域内部的路由器只知道本区域的完整网络拓扑,而不知道其它区域 的网络拓扑情况。
OSPF使用层次结构的区域划分:
在上层的区域叫做主干区域,标识符规定为
0.0.0.0
,作用是用来连通其它在下层的区域,主干区域内的路由器叫做主干路由器其它区域来的信息概括为区域边界路由器
主干路由器可以同时是区域边界路由器
主干区域内还要有一个路由器专门和本自治系统外的其它自治系统交换路由信息,叫做自治系统边界路由器
OSPF是网络层协议,不用UDP而是直接用IP数据报传送(IP数据报首部协议字段值为89)。OSPF构成的数据报很短,可减少路由信息的通信量,不必将长的数据报分片传送。
OSPF分组使用24字节的固定长度首部。
OSPF还有一些特点:
- OSPF允许管理员给每条路由指派不同的代价。OSPF对于不同类型的业务可计算出不同的路由
- 如果一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫做多路径间的负载均衡
- 所有在OSPF路由器之间交换的分组都具有鉴别的功能,因而保证了仅在可信赖的路由器之间交换链路状态信息
- OSPF支持可变长度的子网划分和无分类的编址CIDR
- 由于网络中的链路状态经常变化,因此OSPF让每个链路状态都带上一个32位的序号,序号越大状态越新。【OSPF规定,链路状态序号增长的速度不得超过每5秒钟1次,可保证600年内不产生重复号】
OSPF共有5种分组类型:
- 类型1,问候分组,用来发现和维持邻站的可达性
- 类型2,数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 类型3,链路状态请求分组,向对方请求发送某些链路状态项目的详细信息
- 类型4,链路状态更新分组,用洪泛法对全网更新链路状态
- 类型5,链路状态确认分组,对链路更新分组的确认
OSPF规定,每两个相邻的路由器每隔10秒钟交换一次问候分组,以便知道哪些邻站是可达的。
网络运行过程中,只要有一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用洪泛法向全网更新链路状态。
OSPF使用的是可靠的洪泛法:在收到更新分组后要发送确认(收到重复的更新分组只需要发送一次确认)。
为了确保链路状态数据库与全网的状态保持一致,OSPF规定每隔一段时间要刷新一次数据库中的链路状态。
由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系,因此当互联网规模很大时,OSPF协议要比距离向量协议RIP好得多,且没有“坏消息传得慢”的问题。
外部网关协议BGP
边界网关协议BGP力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
BGP采用了路径向量路由选择协议。
在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”。一个BGP发言人与其它AS的BGP发言人要交换路由信息,就要先建立TCP连接(端口号为179),然后在此连接上交换BGP报文以建立BGP会话,利用BGP会话交换路由信息。
使用TCP连接能提供可靠的服务,也简化了路由选择协议。使用TCP连接交换路由信息的两个BGP发言人,彼此成为对方的邻站或对等站。
每个BGP发言人除了必须运行BGP协议外,还必须运行该自治系统使用的内部网关协议。
BGP协议交换路由信息的结点数量级是自治系统个数的量级,比自治系统中的网络数少很多。
BGP支持无分类域间路由选择CIDR。
BGP刚运行时交换的是整个BGP路由表,但以后只需要在发生变化时更新有变化的部分,节省了网络带宽和减少路由器的处理开销。
RFC4217中规定了BGP-4的四种报文:
- OPEN(打开)报文,用来与另一个BGP发言人建立关系,使通信初始化
- UPDATE(更新)报文,用来通告某一路由的信息,以及列出要撤销的多条路由
- KEEPALIVE(保活)报文,用来周期性地保证邻站的连通性
- NOTIFICATION(通知)报文,用来发送检测到的差错
路由器的构成
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组(网络层的主要工作)。
图中输入和输出端口各有三个方框,用方框中的1、2、3分别代表物理层、数据链路层、网络层的处理模块。
整个路由器结构划分为两大部分:
- 路由选择部分:也叫做控制部分,其核心构建是路由选择处理机
- 分组转发部分:由三部分组成:
交换结构:又称为交换组织,作用是根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去
三种常用的交换方法:
- 通过存储器
- 通过总线
- 通过互连网络
一组输入端口
一组输出端口
分组在路由器的输入端口和输出端口都可能会在队列中排队等候处理,若分组处理速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面进入队列的分组被丢弃(droptail,弃尾)。
“转发”和“路由选择”的区别:
请注意“转发”和“路由选择”是有区别的。在互联网中,“转发”就是路由器根据转发表把收到的IP数据报从路由器合适的端口转发出去。“转发”仅仅涉及到一个路由器。但“路由选择”则涉及到很多路由器,路由表则是许多路由器协同工作的结果。这些路由器按照复杂的路由算法,得出整个网络的拓扑变化情况,因而能够动态地改变所选择的路由,并由此构造出整个的路由表。路由表一般仅包含从目的网络到下一跳(用IP地址表示)的映射,而转发表是从路由表得出的。转发表必须包含完成转发功能所必需的信息。这就是说在转发表的每一行必须包含从要到达的目的网络到输出端口和某些MAC地址信息(如下一跳的以太网地址)的映射。将转发表和路由表用不同的数据结构实现会带来一些好处,这是因为在转发分组时,转发表的结构应当使査找过程最优化,但路由表则需要对网络拓扑变化的计算最优化。路由表总是用软件实现的,但转发表则甚至可用特殊的硬件来实现。请读者注意,在讨论路由选择的原理时,往往不去区分转发表和路由表的区别,而可以笼统地都使用路由表这一名词。
IPv6
解决IP地址耗尽的根本措施就是采用具有更大地址空间的新版本的IP,即IPv6。
IPv6仍支持无连接的传送,但将协议数据单元PDU称为分组,而不是IPv4数据报。
IPv6的主要变化:
- 更大的地址空间,IPv6把地址从IPv4的32位增大到了4倍,即增大到128位
- 扩展的地址层次结构
- 灵活的首部格式
- 改进的选项
- 允许协议继续扩充
- 支持即插即用(即自动配置)
- 支持资源的预分配
- IPv6首部改为8字节对齐,原来的IPv4是4字节对齐
IPv6数据报由两大部分组成:
- 基本首部
- 有效负载:也称净负荷,允许有零个或多个扩展首部,再后面是数据部分
- 版本:占4位,指明协议版本,对IPV6该字段是6
- 通信量类:占8位,区分不同的IPv6数据报的类别或优先级
- 流标号:占20位,IPv6支持资源预分配,并允许路由器把每一个数据报与一个给定的资源分配相联系。IPv6提出流的抽象概念,所谓流,就是互联网上从特定的源点到特定终点(单播或多播)的一些列数据报,而在这个流所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有相同的流标号
- 有效载荷长度,占16位,指明IPv6数据报除基本首部以外的字节数,最大值是64KB(65535字节)
- 下一个首部,占8位
- 当没有扩展首部时,同IPv4一样,指明基本首部后面的数据应交付IP层上面哪一个高层协议
- 当出现扩展首部时,下一个首部字段的值就标识后面第一个扩展首部的类型
- 跳数限制,占8位,防止数据报在网络中无限期的存在,当跳数为0时,数据报被丢弃,最大跳数为255
- 源地址,占128位,数据报发送端的IP地址
- 目的地址,占128位,数据报接收端的IP地址
RFC 2460定义了六种拓展首部:
- 逐跳选项
- 路由选择
- 分片
- 鉴别
- 封装安全有效载荷
- 目的站选项
数据报途中经过的路由器不处理扩展首部(逐跳选项扩展首部除外),大大提高了路由器的处理效率。
每个扩展首部的长度各不相同,都由若干个字段组成,但所有扩展首部的第一个字段都是8位的“下一个首部”字段。
当使用扩展首部时,应按以上先后顺序出现,高层首部总是放在最后面。
IPv6数据报的目的地址可以是以下三种基本类型地址之一:
- 单播:传统的点对点通信
- 多播:一点对多点通信
- 任播:终点是一组计算机,但数据报只交付其中一个,通常是最近的那个
IPv6把主机和路由器称为结点,一个结点可能有多个与链路相连的接口。
IPv6使用冒号十六进制记法,每个16位的值用十六进制值表示,各值之间用冒号分隔。
十六进制记法中,允许把数字前面的0省略,0000可省略前三个0;还可以零压缩,即一连串的0可以用一对冒号取代,但任一地址中只能使用一次零压缩。
CIDR的斜线表示法仍然可用:
未指明地址:16字节全0地址,不能用作目的地址,只能在主机还没配置到一个标准的IP地址时作为主机的源地址使用。该类地址仅此一个
环回地址:该类地址仅此一个
多播地址:该类地址占IPv6地址的1/256
本地链路单播地址:有些单位的网络使用TCP/IP协议,但并没有连接到互联网上。连接在这样的网络上的主机可用这种本地地址进行通信,但不能同互联网上的其它主机通信,该类地址占IPv6地址的1/1024
全球单播地址:3 种划分方法
从IPv4向IPv6过渡只能采用逐步演进的办法,还必须使新安装的IPv6系统能够向后兼容,即IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组选择路由。
两种向IPv6过渡的策略:
双协议栈:指在完全过渡到IPv6之前,使一部分主机(或路由器)装有双协议栈:一个IPv4和一个IPv6。双协议栈的主机(或路由器)记为IPv6/IPv4。双协议栈主机在和IPv6主机通信时使用IPv6地址,而和IPv4主机通信时使用IPv4地址,通过DNS查询使用的IP地址版本。
隧道技术:在IPv6数据报要进入IPv4网络时,把IPv6数据报封装为IPv4数据报,现在整个IPv6数据报变成了IPv4数据报的数据部分。
和IPv4一样,IPv6也不保证数据报的可靠交付,需要使用ICMP来反馈一些差错信息。新的版本称为ICMPv6,比ICMPv4要复杂得多。
ARP和IGMP都已被合并到ICMPv6。
ICMPv6是面向报文的协议,利用报文来报告差错,获取信息,探测邻站或管理多播通信。
ICMPv6还增加了几个定义报文功能和含义的其它协议,我们把这些报文都列入ICMPv6的不同类别,因为这些报文都具有相同的格式,并且所有报文类型都由ICMPv6协议处理。
ND和MLD协议是运行在ICMPv6协议之下的,邻站发现报文和组成员关系报文分别是在ND协议和MLD协议的控制下进行发送和接收的。
IP多播
在互联网上进行多播就叫做IP多播,IP多播所传送的分组需要使用多播IP地址。
多播数据报的目的地址一定不能写入主机的IP地址,应为不可能写下那么多的主机IP地址。在多播数据报的目的地址写入的是多播组的标识符,然后设法让加入这个多播组的主机IP地址与多播组的标识符关联起来。多播数据报首部的协议字段值是2,表明使用网际组管理协议IGMP。
多播组的标识符就是IP地址中的D类地址。
D类地址的前四位的1110,因此D类地址的范围是224.0.0.0
到239.255.255.255
,D类地址可以标志$2^{28}$个多播组。
多播数据报是“尽最大努力交付”,不保证一定能够交付多播组的所有成员。
多播地址只能用于目的地址,而不能用于源地址。
多多播数据报不产生ICMP报文,若在PING命令后面键入多播地址,将永远不会收到响应。
IP多播可以分为两种:
- 本局域网上进行硬件多播
- 在互联网的范围进行多播
IANA拥有以太网地址块的高24位,为00-00-5E
。
TCP/IP协议使用的以太网地址块的范围是从00-00-5E-00-00-00
到00-00-5E-FF-FF-FF
。
IANA拥有以太网组播地址的范围是从01-00-5E-00-00-00
到01-00-5E-7F-FF-FF
。
在每一个地址中,只有23位可用作多播,只能和D类IP地址的23位有一一对应关系。
由于多播IP地址与以太网硬件地址的映射关系并不是唯一的,因此收到多播数据报的主机,需要在IP层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
IP多播需要两种协议:
- 网际组管理协议IGMP
- 多播路由选择协议
IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲是主机的某个进程)参加或退出某个多播组。
多播转发必须动态地适应多播组成员的变化(网络拓扑并未发生变化)。
多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去。
多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。
IGMP的工作分为两个阶段:
- 第一阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP报文后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其它多播路由器
- 第二阶段:组成员的关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要有一台主机对某个组响应,那么多播路由器就认为这个组是活跃的
多播路由选择实际上就是要找出以源主机为根节点的多播转发树。在多播转发树上,每个多播路由器向树的叶节点方向转发收到的多播数据报,但多播转发树上的路由器不会收到重复的多播数据报(即多播数据报不应在互联网上兜圈子)。不同的多播组对应于不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树。
多播路由选择协议在转发多播数据报时使用的三种方法:
- 洪泛和剪除:适用于较小的多播组,采用了反向路径广播RPB避免兜圈子
- 隧道技术:适用于多播组的位置在地理上很分散的情况,将多播数据报封装为单播数据报,在不支持多播的网络中传输
- 基于核心的发现技术:对于多播组的大小在较大范围内变化时都适合。
虚拟专用网VPN和网络地址转换NAT
RFC 1918指明了一些专用地址,这些地址只能用于机构内部通信,不能用于和互联网主机通信:
10.0.0.0
到10.255.255.255
,即10.0.0.0/8
(24位块)172.16.0.0
到172.31.255.255
,即172.16.0.0/12
(20位块)192.168.0.0
到192.168.255.255
,即192.168.0.0/16
(16位块)
采用这样的IP地址的互联网称为专用互联网或本地互联网,简称专用网。
专用IP地址也叫做可重用地址。
当同一个机构在不同地方的部门互相通信时(机构内部的通信),有两种方法:
- 租用专门的通信线路
- 虚拟专用网VPN
专用网内部的主机已经分配到本地IP地址,但又想要和互联网上主机通信,可以使用网络地址转换NAT,该方法需要在专用网连接到互联网的路由器上安装NAT软件。
装有NAT软件的路由器叫做NAT路哟去,它至少要有一个有效的外部全球IP地址。
当NAT路由器具有n个全球IP地址时,专用网内最多可以同时有n台主机接入到互联网。
使用端口号的NAT也叫做网络地址与端口转换NAPT。
多协议标记交换MPLS
MPLS利用面向连接技术,使每个分组携带一个叫做标记的小整数。当分组到达交换机(即标记交换路由器)时,交换机读取分组的标记,并用标记值来检索分组转发表。
MPLS作为一种IP增强技术,被广泛地应用在互联网中。
MPLS具有三个方面的特定:
- 支持面向连接的服务质量
- 支持流量工程,平衡网络负载
- 有效地支持虚拟专用网
MPLS给IP数据报打上标记,根据标记在第二层(链路层)用硬件进行转发,提高转发速率。
MPLS域是指该域中有许多彼此相邻的路由器,并且所有的路由器都是支持MPLS技术的标记交换路由器LSR。LSR同时具有标记交换和路由选择两项功能:
- 路由选择:构造转发表
- 标记交换:快速转发
转发等价类FEC:路由器按照同样的方式对的的IP数据报的集合。
网络管理员采用自定义的FEC可以更好地管理网络的资源,这种均衡网络负载的做法也称为流量工程TE或通信量工程。
加了MPLS首部的IP数据报封装成以太网帧时,以太网的类型字段在单播的情况下设置为8847,在多播的情况下为8848,接收方可以用帧的类型来判决这个帧是否携带了MPLS标记(占4字节)。